/**
 * 提交之后看到同样的思路，
 * 别人的优雅实现
 *  1.一个桶解决 两个左右括号的问题
 *  2.桶里括号的对应数字，相加为0 对应是否匹配
 * 
 *      ===> 而我是申请了两个数组，indexOf取下标判断他们的下标
 *                          同时includes 判断数是否存在
 *          判断所有匹配成功：
 *              我是计量count === s.length/2
 *              
 *          人家是默认匹配，不匹配直接false
 *              (( 怎么判断的这种情况？
 *              居然是判断栈弹出来完没有....!!!
 *              我晕我居然没想到。..
 *  3. es6 
 *         var i in s
 *          ==> i 为下标
 *      
 */
let res = isValid('(');
console.log(res);
function isValid(s){
    if(s.length%2===1){
        return false;
    }

    let bucket = {
        '{':1,
        '[':2,
        '(':3,
        ')':-3,
        ']':-2,
        '}':-1  
    }

    let stack = [];
    for(let i in s){
        //遇到左括号
        if(bucket[s[i]]>0){
            stack.push(s[i]);
        }else if(bucket[s[i]]<0){
            let res = stack.pop();
            if(bucket[res]+bucket[s[i]]!==0){
                return false;
            }
        }else{
            throw new Error('输入含有非法字符！');
        }
    }
    
    // 结束判断栈是否为空
    if(!stack.length){
        return true;
    }
    return false;
}



